package com.example.lixinwei

import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.Menu
import android.view.MenuItem
import android.widget.Button
import android.widget.EditText
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
import com.example.xiesiyu.R
import java.io.File
import kotlin.concurrent.thread

class MainActivity : AppCompatActivity() {

    private lateinit var minEditText: EditText
    private lateinit var maxEditText: EditText
    private lateinit var calculateButton: Button
    private lateinit var resultTextView: TextView
    private lateinit var progressBar: ProgressBar
    private var isCalculating = false
    private val primeNumbers = mutableListOf<Int>()
    private val handler = Handler(Looper.getMainLooper())

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 初始化UI元素
        minEditText = findViewById(R.id.minEditText)
        maxEditText = findViewById(R.id.maxEditText)
        calculateButton = findViewById(R.id.calculateButton)
        resultTextView = findViewById(R.id.resultTextView)
        progressBar = findViewById(R.id.progressBar)

        // 设置按钮点击事件
        calculateButton.setOnClickListener {
            val min = minEditText.text.toString().toIntOrNull()
            val max = maxEditText.text.toString().toIntOrNull()

            if (min != null && max != null && min < max) {
                startPrimeCalculation(min, max)
            } else {
                resultTextView.text = "请输入有效的区间"
            }
        }
    }

    // 计算素数的方法
    private fun startPrimeCalculation(min: Int, max: Int) {
        if (isCalculating) return
        isCalculating = true
        primeNumbers.clear()
        progressBar.isVisible = true
        resultTextView.text = "计算中..."

        // 在后台线程中进行素数计算
        thread {
            for (i in min..max) {
                if (isPrime(i)) {
                    primeNumbers.add(i)
                    // 更新UI
                    handler.post {
                        resultTextView.text = primeNumbers.joinToString(", ")
                        progressBar.progress = ((i - min) * 100) / (max - min)
                    }
                }
            }
            // 完成后
            handler.post {
                progressBar.isVisible = false
                resultTextView.text = "计算完成: ${primeNumbers.joinToString(", ")}"
                saveHistory(primeNumbers)
            }
        }
    }

    // 判断一个数字是否为素数
    private fun isPrime(n: Int): Boolean {
        if (n < 2) return false
        for (i in 2..Math.sqrt(n.toDouble()).toInt()) {
            if (n % i == 0) return false
        }
        return true
    }

    // 保存计算结果到文件，记录格式：查找素数为：X
    private fun saveHistory(primeNumbers: List<Int>) {
        val file = File(filesDir, "prime_history1.txt")
        val formattedHistory = primeNumbers.joinToString("\n") { "查找素数为：$it" }
        file.appendText(formattedHistory + "\n") // 每次计算完保存到文件
    }

    // 加载历史记录
    private fun loadHistory(): List<String> {
        val file = File(filesDir, "prime_history1.txt")
        return if (file.exists()) {
            file.readLines() // 返回文件中的所有记录
        } else {
            emptyList() // 如果文件不存在，返回空列表
        }
    }

    // 创建菜单
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu_history, menu)
        return true
    }

    // 处理菜单项点击事件
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.action_history -> {
                val intent = Intent(this, HistoryActivity::class.java)
                intent.putStringArrayListExtra("history", ArrayList(loadHistory())) // 将历史记录传递给 HistoryActivity
                startActivity(intent)
            }
        }
        return super.onOptionsItemSelected(item)
    }
}
